//Here you find the Page datum, and a number of other things that have no better place
//The Page datum is a way of organizing html pages
//If ProcessPage needs to be called, set a form submit to have action=PageName somewhere

Page  //The Page datum
	var
		content //The datum's content variable.
		href_list //The href_list variable
		window
		browse_settings //Other settings to pass to browse(added to window)
	proc
		GetPage(href)  //The GetPage proc. This proc is what gets called to get a page to send to the user
			content = "\red <BIG><B>Error:</B> Could not find requested file</BIG>" //In case we don't find a page, display this error message
			var/list/href_list = params2list(href) //Some pages may want an href_list in the normal Topic() style as well as the href, so let's be nice and make one for them
			for(var/I in typesof(/Page)) //This for loops through all the types of /Page in the website, and sets I to each
				if(I != /Page) //First make sure I is not this top level /Page datum
					var/Page/P = new I() //Create the datum that we found, so it can be accessed
					P = P.GetPage(href, href_list) //Set P to be what is returned from the GetPage proc.
					if(P) //Check to see if anything was actually returned, in most cases nothing will have been
						return P //Now that P does contain the information we want to give the user, return it
			return src //Incase we weren't able to find what the user was looking for, return the main /Page datum with the error message.

		ProcessPage(href, href_list) //The ProcessPage proc. This gets called to process any information from the user
			return src //This proc returns the src once all needed variables have been set, and things done, it can be done in children by ..()

		DisplayPage(mob/User, settings = null) //Simple and quick way to quickly display a standard page to the player
			if(!settings)
				User << browse(content, "window=[window];[browse_settings]")
			else
				User << browse(content, settings)

		UnDisplayPage(mob/User)
			User << browse(null, "window=[window]")